টেস্টএনজি-তে @DataProvider একটি শক্তিশালী ফিচার যা ডেটা ড্রিভেন টেস্টিং (Data-Driven Testing) সাপোর্ট করে। এটি টেস্ট মেথডকে একাধিক ইনপুট দিয়ে চালানোর সুযোগ দেয়।
@DataProvider ব্যবহার করে, একটি টেস্ট মেথড একাধিক সেট ডেটার মাধ্যমে একাধিকবার চালানো সম্ভব, যা কোড পুনরাবৃত্তি কমায় এবং টেস্টিং আরও কার্যকর করে।
@DataProvider এর বৈশিষ্ট্য
- একই টেস্ট মেথড বিভিন্ন ইনপুট ডেটা দিয়ে চালানো যায়।
- সহজেই বড় আকারের টেস্ট ডেটা পরিচালনা করা যায়।
- একাধিক ইনপুট টেস্ট করার জন্য আলাদা টেস্ট মেথড লিখতে হয় না।
@DataProvider এর সিনট্যাক্স
@DataProvider(name = "dataProviderName")
public Object[][] dataProviderMethod() {
return new Object[][] {
{dataSet1},
{dataSet2},
...
};
}
@Test(dataProvider = "dataProviderName")
public void testMethod(Type1 arg1, Type2 arg2, ...) {
// Test logic here
}
উদাহরণ: @DataProvider ব্যবহার
উদাহরণ ১: সাধারণ ডেটা ড্রিভেন টেস্ট
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class DataProviderExample {
@DataProvider(name = "testData")
public Object[][] provideData() {
return new Object[][] {
{"Alice", 25},
{"Bob", 30},
{"Charlie", 35}
};
}
@Test(dataProvider = "testData")
public void testMethod(String name, int age) {
System.out.println("Name: " + name + ", Age: " + age);
}
}
আউটপুট:
Name: Alice, Age: 25
Name: Bob, Age: 30
Name: Charlie, Age: 35
উদাহরণ ২: লজিক যাচাই করার জন্য @DataProvider
import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class CalculatorTest {
@DataProvider(name = "additionData")
public Object[][] provideAdditionData() {
return new Object[][] {
{2, 3, 5},
{10, 20, 30},
{15, 15, 30}
};
}
@Test(dataProvider = "additionData")
public void testAddition(int num1, int num2, int expected) {
int actual = num1 + num2;
Assert.assertEquals(actual, expected, "Addition result is incorrect!");
}
}
আউটপুট: যদি প্রত্যেক ইনপুট সেটের জন্য লজিক সঠিক থাকে, টেস্ট পাস করবে। না হলে ব্যর্থ হবে।
একাধিক @DataProvider পরিচালনা করা
একাধিক @DataProvider ব্যবহার করা সম্ভব। আলাদা আলাদা টেস্ট মেথডে আলাদা @DataProvider অ্যাসাইন করা যায়।
@DataProvider(name = "numbers")
public Object[][] numberProvider() {
return new Object[][] {{1}, {2}, {3}};
}
@DataProvider(name = "strings")
public Object[][] stringProvider() {
return new Object[][] {{"Test1"}, {"Test2"}, {"Test3"}};
}
@Test(dataProvider = "numbers")
public void testNumbers(int number) {
System.out.println("Number: " + number);
}
@Test(dataProvider = "strings")
public void testStrings(String text) {
System.out.println("Text: " + text);
}
Parameterized @DataProvider
@DataProvider ডায়নামিক প্যারামিটার গ্রহণ করতে পারে। উদাহরণস্বরূপ, যখন নির্দিষ্ট ইনপুট টেস্ট করতে হবে।
@DataProvider(name = "dynamicData")
public Object[][] provideDynamicData(Method method) {
if (method.getName().equals("testLogin")) {
return new Object[][] {{"admin", "admin123"}, {"user", "user123"}};
} else if (method.getName().equals("testSignup")) {
return new Object[][] {{"newUser", "password1"}};
}
return null;
}
@Test(dataProvider = "dynamicData")
public void testLogin(String username, String password) {
System.out.println("Login with Username: " + username + ", Password: " + password);
}
@Test(dataProvider = "dynamicData")
public void testSignup(String username, String password) {
System.out.println("Signup with Username: " + username + ", Password: " + password);
}
@DataProvider এর সুবিধা
- বড় আকারের টেস্ট ডেটা পরিচালনা সহজ।
- পুনরাবৃত্ত কোডের প্রয়োজনীয়তা কমে।
- ডেটা-ভিত্তিক টেস্ট কেস তৈরি দ্রুত হয়।
- কোড রিইউজ করার সুযোগ বাড়ে।
সারাংশ
@DataProvider টেস্টএনজি-র একটি গুরুত্বপূর্ণ ফিচার যা একাধিক ইনপুট ডেটার সাহায্যে একই টেস্ট মেথড চালানোর সুযোগ দেয়। এটি ডেটা ড্রিভেন টেস্টিং সহজতর করে এবং বড় আকারের টেস্টিং প্রজেক্টের জন্য অপরিহার্য।
Read more